
#include "nane/ScriptSystem/lua/luascriptsystem.h"
#include "nane/ScriptSystem/lua/luascriptmodule.h"
#include "nane/core/log.h"
#include "nane/core/assert.h"

namespace nane
{
    ////////////////////////////////////////////////////////////////////////////////////////////////
    LuaScriptSystem::LuaScriptSystem()
    {

    }
    ////////////////////////////////////////////////////////////////////////////////////////////////
    LuaScriptSystem::~LuaScriptSystem()
    {

    }
    ////////////////////////////////////////////////////////////////////////////////////////////////
    bool LuaScriptSystem::Initialize()
    {
        return true;
    }
    ////////////////////////////////////////////////////////////////////////////////////////////////
    void LuaScriptSystem::Shutdown()
    {

    }
    ////////////////////////////////////////////////////////////////////////////////////////////////
    IScriptModule* LuaScriptSystem::CreateModule( const char* _moduleName )
    {
        LuaScriptModule* luaScriptModule = new LuaScriptModule(_moduleName);
        if( luaScriptModule->Initialize() == false )
        {
            delete luaScriptModule;
            luaScriptModule = NULL;
        }
        return luaScriptModule;
    }
    ////////////////////////////////////////////////////////////////////////////////////////////////
    IScriptModule* LuaScriptSystem::LoadModule( const char* _moduleName, IInput* _input )
    {
        NANE_ASSERT( _input != NULL, "Input must be valid" );
        LuaScriptModule* luaScriptModule = new LuaScriptModule(_moduleName);
        if( luaScriptModule->Initialize() == false
             || luaScriptModule->Load(_input) == false )
        {
            delete luaScriptModule;
            luaScriptModule = NULL;
        }
        return luaScriptModule;
    }
    ////////////////////////////////////////////////////////////////////////////////////////////////
    bool LuaScriptSystem::RunModule( IScriptModule* _module )
    {
        LuaScriptModule* scriptModule = static_cast<LuaScriptModule*>(_module);
        if( scriptModule != NULL )
        {
            return scriptModule->Run();
        }
        return false;
    }
    ////////////////////////////////////////////////////////////////////////////////////////////////
    void LuaScriptSystem::ReleaseModule( IScriptModule* _module )
    {
        delete static_cast<LuaScriptModule*>(_module);
    }
    ////////////////////////////////////////////////////////////////////////////////////////////////
}   // namespace nane
